package cn.lwj.service.impl;

import cn.lwj.common.ServiceException;
import cn.lwj.mapper.CategoryMapper;
import cn.lwj.mapper.DishMapper;
import cn.lwj.mapper.SetmealMapper;
import cn.lwj.pojo.Category;
import cn.lwj.pojo.Dish;
import cn.lwj.pojo.Setmeal;
import cn.lwj.service.CategoryService;
import cn.lwj.service.DishService;
import cn.lwj.service.SetmealService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class CategoryServiceImpl extends ServiceImpl<CategoryMapper, Category> implements CategoryService {

//    删除分类需要用到 菜品和套餐 所需需要注入

    @Autowired
    private SetmealService setmealService;

    @Autowired
    private DishService dishService;


    /**
     * 删除分类
     * @param id
     */
    @Override
    public void delete(long id) {

//        1.检查是否关联菜品 (可以进行统计  也可以查询单个)
        LambdaQueryWrapper<Dish> dishLqw = new LambdaQueryWrapper<>();
        dishLqw.eq(Dish::getCategoryId,id);
        long dishCount = dishService.count(dishLqw); // 要记住带条件 写了没带 等于白写
        if(dishCount>0){
//            说明关联了菜品 可以抛出业务异常
            throw new ServiceException("该菜品已关联分类，不能删除");
//            抛出异常就需要捕获 并且进行处理 给与前端响应
        }
//        2.检查是否关联套餐
        LambdaQueryWrapper<Setmeal> setmealLqw = new LambdaQueryWrapper<>();
        setmealLqw.eq(Setmeal::getCategoryId,id);
        long setmealCount = setmealService.count(setmealLqw);
        if(setmealCount>0){
//            说明关联了菜品 可以抛出业务异常
            throw new ServiceException("该套餐已关联分类，不能删除");
//            抛出异常就需要捕获 并且进行处理 给与前端响应
        }
//        3.正常删除菜品
//        因为控制层调用mp提供的业务层方法时  本质上就是调用的IService提供的方法
        super.removeById(id);
    }
}
